package Collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Scanner;

import org.junit.Test;

/*
	 * 1.接口常用的方法，
		  	编译看左边，执行看右边
		  	这些 方法所有实现类都有
		格式：
	  	1.1 list01.add(obj); 添加元素
	  	1.2 list01.remove(obj); 删除指定元素，(指定的是元素的值）
	  	1.3 list01.isEmpty(); 判断集合是否为空 (没有元素)
	  	1.4 list01.clear(); 清除所有元素 (集合变空)
	  	
	 * 2. 集合遍历(转数组)
	  	1.创建集合，添加元素
	  	2.把集合 转成 数组 （xxx.toArray()），Object类型
	  	3.遍历数组
		 	getName属于Dog类，Oject元素调不了
		 	需要把元素强转回Dog类
		 	再用转回Dog类的元素调用getName()方法
	 * 
	 * 3.常用集合方法2--带all的
	 	 3.1. list.addall(); 必须传入集合元素 b的元素加到a里
	 	 3.2.删除交集。list.removeall(); 必须传入集合元素
	 	 3.3.判断 a是否包含 b的全部（参数集合的全部）。list.containsall();
	 	 3.4.把ab的交集赋给a a.retainall(b) ' a = a ∩ b' 。
	 */

public class 使用Collection接口 {
	public static void main(String[] args) {
		
	}
	
	
	// 集合 常用方法
	@Test
	@SuppressWarnings({ "rawtypes", "unused", "unchecked" }) //扫黄 无视不定义泛型警告
	public void 集合常用方法_1() {
		System.out.println("使用Collection接口.集合常用方法_1()");
		System.out.println();
		
		//1.添加元素
		System.out.println("1.这里是-.add.添加元素-：");
		Collection list01 = new ArrayList();  //ArrayList()的toString方法定义在了爷爷类里
		list01.add("添加list");
		list01.add("1");
		list01.add("10.9");
		System.out.println(list01);
		
		Student s1 = new Student("sgx", 21);
		list01.add(s1); //添加自定义对象
		System.out.println(list01); 
		System.out.println("```````````````````````````````````````````````````````````````");
		
		//2.删除元素
		System.out.println("2.这里是-.remove.删除元素-：");
		list01.remove("添加list");// 删除  "添加list" 这个元素
		System.out.println(list01);
		System.out.println("```````````````````````````````````````````````````````````````");
		
		//3.判断集合是否为空
		System.out.println("3.这里是-.isEmpty.判断集合是否为空-：");
		boolean isKong = list01.isEmpty();
		System.out.println(isKong);
		System.out.println("```````````````````````````````````````````````````````````````");
		
		//4.清空集合所有元素
		System.out.println("4.这里是-.clear.清空集合元素-：");
		list01.clear();
		System.out.println(list01);
		System.out.println("```````````````````````````````````````````````````````````````");
	}
	
	// 集合 遍历(转数组)
	@Test
	@SuppressWarnings({ "rawtypes", "unused", "unchecked" }) //扫黄 无视不定义泛型警告
	/*
	  	1.创建集合，添加元素
	  	2.把集合 转成 数组 （xxx.toArray()），Object类型
	  	3.遍历数组
		 	getName属于Dog类，Oject元素调不了
		 	需要把元素强转回Dog类
		 	再用转回Dog类的元素调用getName()方法
	 */
	public void 集合转数组_遍历1() {
		Collection list02 = new ArrayList();
		list02.add(new Dog("二哈"));
		list02.add(new Dog("金毛"));
		
		Object[] arrayA = list02.toArray(); // *******这里转成了Object类，每个元素都是Object类
		
		for (int i = 0; i < arrayA.length; i++) {
			
			Dog dog = (Dog)arrayA[i]; // 需要再把数组强转回Dog类
			
			System.out.println( dog.getName() );// arrayA[i]不能调用Dog类的getName方法， arrayA[i]如果没有强转回Dog，那就是Object类，Object类里没有getName()方法
			
		}
	}
	
	@Test
	@SuppressWarnings({ "rawtypes", "unused", "unchecked" }) //扫黄 无视不定义泛型警告
	public void 集合常用方法_2_带all的() {
		// addall / removeall / containsall / retainall
		
		Collection list03 = new ArrayList();
		Collection list4 = new ArrayList();
		/*
		// 1.list.addall(); 必须传入集合元素 b的元素加到a里
		list03.add("a");	list03.add("b");	list03.add("c");	list03.add("d");
		list4.add("z");	list4.add("y");
		
		list03.addAll(list); //[a,b,c,d] + [z,y]
		System.out.println(list03); //[a,b,c,d,z,y]
		*/
		
		/*
		// 2.删除交集。list.removeall(); 必须传入集合元素
		list03.add("a");	list03.add("b");	list03.add("c");	list03.add("d");
		list4.add("a");	list4.add("b");
		System.out.println(list03);//[a,b,c,d] 
		
		list03.removeAll(list4);//[a,b,c,d] - [a,b]
		System.out.println(list03);//[c,d]
		*/
		
		/*
		// 3.判断 a是否包含 b的全部（参数集合的全部）。list.containsall();
		list03.add("a");	list03.add("b");	list03.add("c");	list03.add("d");
		list4.add("a");	list4.add("b");
		System.out.println(list03);//[a,b,c,d] 
		
		boolean isBaoHan = list03.containsAll(list4);//[a,b,c,d] ?包含  [a,b]
		System.out.println(isBaoHan);//true[c,d]
		*/
		
		/*
		 * // 4.把ab的交集赋给a a.retainall(b) ' a = a ∩ b' 。
		 * */
		list03.add("a");	list03.add("b");	list03.add("c");	list03.add("d");
		list4.add("e");		list4.add("f");		list4.add("a");		list4.add("b");
		System.out.println(list03); //[a,b,c,d]
		System.out.println(list4); //[e,f,a,b]
		
		list03.retainAll(list4); // [a,b,c,d] ∩ [e,f,a,b] 取交集
		System.out.println(list03); // [a,b]
		 
		
	}
	
	@Test
	@SuppressWarnings({ "rawtypes", "unused", "unchecked" }) //扫黄 无视不定义泛型警告
	public void 集合转数组_遍历02222222() {
		Collection list03 = new ArrayList();
		list03.add(new Dog("雪纳瑞"));
		list03.add(new Dog("边牧"));
		
		Object[] arrayB = list03.toArray();
		for (int i = 0; i < arrayB.length; i++) {
			Dog dog = (Dog)arrayB[i];
			System.out.println(dog.getName());
		}
	}	
	@Test
	@SuppressWarnings({ "rawtypes", "unused", "unchecked" }) //扫黄 无视不定义泛型警告
	public void HuiWen() {
		Scanner sc = new Scanner(System.in);
		System.out.print("请输入数字或英文：");
		String input = sc.next();
		char[] array = input.toCharArray();
		boolean isHuiWen = true;
		for (int i = 0; i < array.length / 2; i++) {
			if (array[i] != array[array.length-1-i]) {
			isHuiWen = false;
			break;
			}
		}
		if (isHuiWen) {
				System.out.println("是回文");
			}else {
				System.out.println("不是回文");
			}
	}
	
	
	@Test
	@SuppressWarnings({ "rawtypes", "unused", "unchecked" }) //扫黄 无视不定义泛型警告
	public void 统计一个字符串里_英文字母_空格_数字_其它字符_的个数()  {
		
		int letterCount = 0;
		int numberCount = 0;
		int spaceCount = 0;
		int otherCount = 0;
		
		Scanner sc = new Scanner(System.in);
		System.out.print("请输入数字或英文：");
		String input = sc.nextLine();
		char[] array = input.toCharArray();
		
		for (int i = 0; i < array.length; i++) {
			if ( (array[i] >= 'a' && array[i] <= 'z') || (array[i] >= 'A' && array[i] <= 'Z') ) {
				letterCount++;
			}else if(array[i] >= '0' && array[i] <= '9') {
				numberCount++;
			}else if (array[i] == ' ') {
				spaceCount++;
			}else {
				otherCount++;
			}
		}
		System.out.println("字母：" + letterCount + "个");
		System.out.println("数字：" + numberCount + "个");
		System.out.println("空格：" + spaceCount + "个");
		System.out.println("其他符号：" + otherCount + "个");
	}

}
